C语言中,color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1))是什么意思

来源:百度知道 编辑:UC知道 时间:2024/06/10 09:42:07
color和str是定义好的字符型数组,其他的我就一概看不懂了...
void main()
{
int i,j, n = 0;
char *color[20], str[10], *temp;

scanf("%s", str);
while(str[0] != '#') {
color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1));
strcpy(color[n], str);
n++;
scanf("%s", str);}

for(i = 0; i < n; i++)
printf("%s ", color[i]);
printf("\n");
return 0;
}
弱弱的问一个弱智问题...
scanf("%s", str),为什么str是数组却没有用[]表示输入的为第几个呢?

void main()
{
int i,j, n = 0; //不说了,定义
char *color[20], str[10], *temp;//同上,但是注意*color[20]定义的是指针数组,也就是说color[n]里面装的是指针。

scanf("%s", str);//输入
while(str[0] != '#')
{
color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1));//创建一个长度为strlen(str)+1的一个数组(或者说是栈)数组第一个元素的地址给了color[n]具体元素可以用color[n][0],color[n][1]...来表示
strcpy(color[n], str);//把字符串str[20]里的元素复制到刚才创建的数组里
n++;
scanf("%s", str);
}

for(i = 0; i < n; i++)
printf("%s ", color[i]);//打出color[n]数组共n个
printf("\n");
return 0;
}

这个程序实现的功能是输入n<20个字符串,每个字符串长度小于10如果输入"#"则表示输入结束,最后打出输入的字符串。

color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1))

从左到右讲起, 首先等号左边是 一个 char* 的数组的一个元素,也就是一个char* : color[n]; 右边 是用 malloc分配堆空间内存, malloc的返回值类型是void*,需要用(char*)来强转类型以和等号左边匹配;malloc的 参数是 需要